<template>
  <div class="login-account">
    <!-- 这里要把账号数据绑定过来 不然规则验证不到 -->
    <el-form
      ref="formRef"
      status-icon
      :rules="rules"
      :model="account"
      label-width="60px"
    >
      <el-form-item label="账号:" prop="name">
        <el-input v-model="account.name" />
      </el-form-item>
      <el-form-item label="密码:" prop="password">
        <el-input v-model="account.password" show-password />
      </el-form-item>
    </el-form>
  </div>
</template>

<script setup lang="ts">
import { ref, reactive } from 'vue'
import { useLoginStore } from '@/store/modules/login'
import { ElForm } from 'element-plus' // 要使用组件实例的方法

import { rules } from '../config/accountConfig'
import localCache from '@/utils/cache' // 工具函数

const loginStore = useLoginStore()

// 账号密码
const account = reactive({
  // 从本地获取账号 自动填入
  name: localCache.getCache('name') ?? '',
  password: localCache.getCache('password') ?? ''
})

const formRef = ref<InstanceType<typeof ElForm>>()
const loginAction = (iskeepPassword: boolean) => {
  // 验证form表单的函数 el内置
  formRef.value?.validate((valid) => {
    // 如果验证通过 1、判断是否需要记住密码 2、验证登录
    if (valid) {
      if (iskeepPassword) {
        // 记住密码
        localCache.setCache('name', account.name)
        localCache.setCache('password', account.password)
      } else {
        // 不记住密码
        localCache.removeCache('name')
        localCache.removeCache('password')
        account.name = ''
        account.password = ''
      }
    }
  })
  loginStore.accountLogin({ ...account }) // 传入账号密码
}

// 使用setup语法的时候 需要手动暴露想要暴露出去的属性 无需导入
defineExpose({ loginAction })
</script>
<style scoped></style>
